package com.winning.common.tools;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import sun.misc.BASE64Decoder;

import com.framework.server.log.LogUtils;
import com.framework.server.log.bean.LoginLog;
import com.framework.util.date.DateConvert;

/**
 * 类名称：Util
 * 类描述：公用代码或者工具接口
 * 创建人：liuwensheng
 * 创建时间：2015-3-23 下午4:31:01
 * 修改人：liuwensheng
 * 修改时间：2015-3-23 下午4:31:01
 * 修改备注：
 */
@SuppressWarnings("restriction")
public class CommonTool {

    /**
     * @param @param yljgdm 医疗机构代码
     * @param @param rygh   人员工号
     * @param @param dldm   登录代码
     * @param @param dlmm   登录密码
     * @param @param ip     IP
     * @param @param xm     姓名
     * @param @param ssxt   所属系统
     * @param @param dljg   登录结果
     * @return void
     * @throws
     * @Title: saveLogHandler
     * @Description: 增加记录访问子业务系统日志接口
     */
    public static void saveLogHandler(String yljgdm, String rygh, String dldm, String dlmm, String ip, String xm, String ssxt, String dljg) {
        LoginLog lg = new LoginLog();

        lg.setYljgdm(yljgdm);
        lg.setRygh(rygh);
        lg.setDldm(dldm);
        lg.setDlmm(dlmm);
        lg.setIp(ip);
        lg.setDlsj(DateConvert.getNowYYYY_MM_DD_HH_MM_DD());
        lg.setRyxm(xm);

        //用户类型  集成平台只有医护人员登录
        lg.setYhlx("1");
        lg.setSsxt(ssxt);
        lg.setDljg(dljg);

        LogUtils.doLoginLog(lg);
    }

    /**
     * 获取用户IP
     *
     * @param req
     * @return
     */
    public static String getIpAddr(HttpServletRequest req) {
        String ipAddress = null;
        ipAddress = req.getRemoteAddr();
        ipAddress = req.getHeader("x-forwarded-for");
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = req.getHeader("Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = req.getHeader("WL-Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = req.getRemoteAddr();
        }

        //对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
        if (ipAddress != null && ipAddress.length() > 15) { //"***.***.***.***".length() = 15
            if (ipAddress.indexOf(",") > 0) {
                ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
            }
        }
        return ipAddress;
    }


    /**
     * 将 s 进行 BASE64 编码
     *
     * @param s
     * @return
     */
    public String getBASE64(String s) {
        if (s == null) {
            return null;
        }

        return (new sun.misc.BASE64Encoder()).encode(s.getBytes()).replace("\n", "").replace("\r", "");
    }

    /**
     * 将 BASE64 编码的字符串 s 进行解码
     *
     * @param s
     * @return
     */
    public String getFromBASE64(String s) {
        if (s == null || "".equals(s)) {
            return null;
        }

        BASE64Decoder decoder = new BASE64Decoder();

        try {
            byte[] b = decoder.decodeBuffer(s);
            return new String(b, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @param @return
     * @return String
     * @throws
     * @Title: getCurrentDate
     * @Description: 获取当前日期
     */
    public static String getCurrentDate() {
        Date date = new Date();
        SimpleDateFormat sdfToStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String result = sdfToStr.format(date);

        return result;
    }

    /**
     * @param @param  dateString
     * @param @return
     * @return String
     * @throws
     * @Title: getBrithTime
     * @Description: 获取生日时间格式， yyyy-MM-dd
     */
    public static String getBrithTime(String dateString) {
        //保证月份不超过12，日期不超过31
        String el = "[1-2][0-9]{3}(0\\d{1}|1[1-2])(0\\d{1}|[12]\\d{1}|3[12])";

        if (dateString.indexOf("-") > -1) {
            el = "[1-2][0-9]{3}-(0\\d{1}|1[1-2])-(0\\d{1}|[12]\\d{1}|3[12])";
        }

        Pattern patter = Pattern.compile(el);

        Matcher m = patter.matcher(dateString);

        boolean dataFlag = m.matches();

        //时间格式验证失败
        if (!dataFlag) {
            return null;
        }

        SimpleDateFormat sdfToStr = new SimpleDateFormat("yyyyMMdd");

        Date date = null;
        try {
            date = sdfToStr.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        SimpleDateFormat sdfToStr1 = new SimpleDateFormat("yyyyMMdd");

        String dateStr = sdfToStr1.format(date);

        return dateStr;
    }


}
